﻿using System;
using System.IO;
using System.Data;
using System.Windows;
using System.Collections;
using System.Windows.Input;
using System.ComponentModel;
using System.Windows.Controls;
using Sinacor.Infra.UI.Common;
using Sinacor.Infra.UI.Controls;
using Sinacor.Infra.UI.Controls.SmartClient;
using System.Collections.Generic;
using Sinacor.Infra.UI.Controls.SmartClient.Validation;
using Sinacor.UI.Bovespa.Alocacao.Presenter;
using Sinacor.UI.Bovespa.Clientes.View.SmartClient;
using Sinacor.UI.Bovespa.Ordens.View.SmartClient;
namespace Sinacor.UI.Bovespa.Alocacao.View.SmartClient
{
    public partial class TratamentoRecompra : SinacorWindow, IRecompra
    {
        #region Atributos
        /// <summary>
        /// Recompra
        /// </summary>
        public Presenter.Recompra _presenter { get; set; }

        #endregion
        public TratamentoRecompra()
        {
            this.Inicializar();
        }

        private void Inicializar()
        {
            InitializeComponent();
            _presenter = new Recompra(this);
            this.DataContext = this._presenter;
            this.AfterInitialize += new RoutedEventHandler(TratamentoRecompra_AfterInitialize);
            this.dgdExecucoes.NewItemType = typeof(Model.ValoresRecompra);
            this.dgdFalhas.NewItemType = typeof(Model.FalhaRecompra);
            this.Closing += new System.ComponentModel.CancelEventHandler(TratamentoRecompra_Closing);
        }

        void TratamentoRecompra_Closing(object sender, System.ComponentModel.CancelEventArgs e)
        {
            //TODO: Implementar closing
        }

        void TratamentoRecompra_AfterInitialize(object sender, RoutedEventArgs e)
        {
            this.btnSalvar.IsEnabled = false;

            this._presenter.Inicializar();
        }

        #region IRecompra Members

        public void AtualizarCalendario()
        {
            cboDataPregao.UpdateTarget(SinacorComboBox.ItemsSourceProperty);
            this._presenter.FiltroFalhaRecompra.DataPregao = this._presenter.InformacoesMovimento.DataMovimento;
            cboDataPregao.UpdateTarget(SinacorComboBox.SelectedValueProperty);
        }

        public void AtualizarComposicaoFinanceiraRecompra()
        {
            txtVolumeFalha.UpdateTarget(SinacorDecimalTextBox.ValueProperty);
            txtVolumeRegularizacao.UpdateTarget(SinacorDecimalTextBox.ValueProperty);
            txtEmolumentosFalha.UpdateTarget(SinacorDecimalTextBox.ValueProperty);
            txtEmolumentosRegularizacao.UpdateTarget(SinacorDecimalTextBox.ValueProperty);
            txtLiquidacaoFalha.UpdateTarget(SinacorDecimalTextBox.ValueProperty);
            txtLiquidacaoRegularizacao.UpdateTarget(SinacorDecimalTextBox.ValueProperty);
            txtCorretagemFalha.UpdateTarget(SinacorDecimalTextBox.ValueProperty);
            txtCorretagemRegularizacao.UpdateTarget(SinacorDecimalTextBox.ValueProperty);
            txtVlrFinalLiq.UpdateTarget(SinacorDecimalTextBox.ValueProperty);

            rdbCorretagemFalha.UpdateTarget(SinacorRadioButton.IsCheckedProperty);
            rdbCorretagemNaoCobra.UpdateTarget(SinacorRadioButton.IsCheckedProperty);
            rdbCorretagemRegularizacao.UpdateTarget(SinacorRadioButton.IsCheckedProperty);
            rdbEmolumentosFalha.UpdateTarget(SinacorRadioButton.IsCheckedProperty);
            rdbEmolumentosNaoCobra.UpdateTarget(SinacorRadioButton.IsCheckedProperty);
            rdbEmolumentosRegularizacao.UpdateTarget(SinacorRadioButton.IsCheckedProperty);
            rdbLiquidacaoFalha.UpdateTarget(SinacorRadioButton.IsCheckedProperty);
            rdbLiquidacaoNaoCobra.UpdateTarget(SinacorRadioButton.IsCheckedProperty);
            rdbLiquidacaoRegularizacao.UpdateTarget(SinacorRadioButton.IsCheckedProperty);
            rdbVolumeFalha.UpdateTarget(SinacorRadioButton.IsCheckedProperty);
            rdbVolumeNaoCobra.UpdateTarget(SinacorRadioButton.IsCheckedProperty);
            rdbVolumeRegularizacao.UpdateTarget(SinacorRadioButton.IsCheckedProperty);

        }

        public void AtualizarExecucoesRecompra()
        {
            dgdExecucoes.UpdateTarget(SinacorDataGrid.ItemsSourceProperty);
        }

        public void AtualizarFalhasRecompra()
        {
            dgdFalhas.UpdateTarget(SinacorDataGrid.ItemsSourceProperty);
        }

        public bool ConfirmarAtualizacaoComposicaoFinanceira()
        {
            return (SinacorMessageBox.Show(FindResource("Bovespa.Alocacao.Message.GravarCompFin").ToString(),
                    SinacorMessageBoxButton.YesNo, SinacorMessageBoxImage.Question
                    ) == SinacorMessageBoxResult.Yes);
        }

        public void InformarNenhumaFalhaEncontrada()
        {
            SinacorMessageBox.Show(this.FindResource("Bovespa.Alocacao.Message.PesquisaSemRetorno").ToString(), SinacorMessageBoxButton.Ok, SinacorMessageBoxImage.Exclamation);
        }

        public void ProibirAcessoMovimentoAberto()
        {
            SinacorMessageBox.Show(this.FindResource("Bovespa.Alocacao.Message.MovOrdensNaoFechado").ToString(), SinacorMessageBoxButton.Ok, SinacorMessageBoxImage.Exclamation);
            this.Close();
        }

        #endregion

        private void btnPesquisarCliente_OnBufferedClick(object sender, RoutedEventArgs e, int clickCount)
        {
            PesquisaClientes pesquisaClientes = new PesquisaClientes();

            Clientes.Model.PesquisaCliente filtroPesq = new Sinacor.UI.Bovespa.Clientes.Model.PesquisaCliente() { Apelido = txtCliente.Text };

            //Carrega paramentros
            pesquisaClientes.CarregaParametros(Sinacor.UI.Bovespa.Clientes.Model.Enum.JanelaChamada.TratamentoRecompra, filtroPesq);

            pesquisaClientes.Owner = this;
            pesquisaClientes.SetMenuHeader("Bovespa.Clientes.Label.PesquisaClientesMenuHeader");
            pesquisaClientes.ShowDialog();

            if (pesquisaClientes.PesquisaClienteModel.Codigo > 0)
            {
                _presenter.FiltroFalhaRecompra.CodigoCliente = pesquisaClientes.PesquisaClienteModel.Codigo;
                _presenter.FiltroFalhaRecompra.ApelidoCliente = pesquisaClientes.PesquisaClienteModel.Apelido;
                txtCliente.UpdateTarget(SinacorTextBox.TextProperty);
            }
        }

        private void btnPesquisarAtivo_OnBufferedClick(object sender, RoutedEventArgs e, int clickCount)
        {
            this.ClearServiceErrors();
            
            Ordens.Model.Titulo modelTitulo = new Ordens.Model.Titulo();
            modelTitulo.Codigo = txtAtivo.Text;
            modelTitulo.Mercado = null;
            modelTitulo.DataPregao = ((Model.Calendario)cboDataPregao.SelectedItem).DataPregao;

            PesquisaTitulo pesquisaTitulo = new PesquisaTitulo();
            pesquisaTitulo.CarregarParametros(modelTitulo, null);
            pesquisaTitulo.Owner = this;
            pesquisaTitulo.SetMenuHeader("Bovespa.Ordens.Label.ManutencaoOrdens");
            pesquisaTitulo.ShowDialog();

            if (pesquisaTitulo.TituloEscolhido != null)
            {
                _presenter.FiltroFalhaRecompra.Ativo = pesquisaTitulo.TituloEscolhido.Codigo;
                txtAtivo.UpdateTarget(SinacorTextBox.TextProperty);
            }

        }

        private void btnPesquisar_OnBufferedClick(object sender, RoutedEventArgs e, int clickCount)
        {
            this.ShowUserWaitingProcess();
            
            this.ClearServiceErrors();

            _presenter.ControleComposicaoFinanceira = new Sinacor.UI.Bovespa.Alocacao.Model.ControleComposicaoFinanceiraRecompra();
            _presenter.ListaFalhaRecompras.Clear();
            _presenter.FalhaRecompraCorrente = new Sinacor.UI.Bovespa.Alocacao.Model.FalhaRecompra();
            
            this.AtualizarComposicaoFinanceiraRecompra();
            this.AtualizarExecucoesRecompra();

            this.btnSalvar.IsEnabled = false;

            _presenter.ConsultarFalhasRecompras();


            this.HideUserWaitingProcess();
        }

        private void btnNovaPesquisa_OnBufferedClick(object sender, RoutedEventArgs e, int clickCount)
        {
            this.btnSalvar.IsEnabled = false;

            this.ClearServiceErrors();

            _presenter.FiltroFalhaRecompra = new Sinacor.UI.Bovespa.Alocacao.Model.Parameter.FiltroFalhaRecompra();
            _presenter.ListaFalhaRecompras.Clear();
            _presenter.ControleComposicaoFinanceira = new Sinacor.UI.Bovespa.Alocacao.Model.ControleComposicaoFinanceiraRecompra();
            _presenter.FalhaRecompraCorrente = new Sinacor.UI.Bovespa.Alocacao.Model.FalhaRecompra();

            txtAtivo.UpdateTarget(SinacorTextBox.TextProperty);
            txtCliente.UpdateTarget(SinacorTextBox.TextProperty);

            this.AtualizarCalendario();

            this.AtualizarFalhasRecompra();
            this.AtualizarExecucoesRecompra();
            this.AtualizarComposicaoFinanceiraRecompra();

            this.AtualizarControleComposicaoFinanceira();

        }

        private void btnSalvar_OnBufferedClick(object sender, RoutedEventArgs e, int clickCount)
        {
            this.ClearServiceErrors();

            this.AtualizarControleComposicaoFinanceira();

            _presenter.CalcularTotalLiquidar();

            _presenter.AtualizarComposicaoFinanceiraRecompra();
        }

        private void selecionarOpcao(object sender, RoutedEventArgs e)
        { 
            if(e.OriginalSource is SinacorRadioButton)
            {
                this.AtualizarControleComposicaoFinanceira();
                              
                _presenter.CalcularTotalLiquidar();

                if (_presenter.ControleComposicaoFinanceira.TotalFinalLiquidar != null && 
                    _presenter.ControleComposicaoFinanceira.ValoresFalha != null &&
                    _presenter.ControleComposicaoFinanceira.ValoresRegularizacao != null)
                    this.btnSalvar.IsEnabled = true;
            }
        }

        private void AtualizarControleComposicaoFinanceira()
        {
            _presenter.ControleComposicaoFinanceira.IndicadorFalhaVolume = rdbVolumeFalha.IsChecked.Value;
            _presenter.ControleComposicaoFinanceira.IndicadorFalhaEmolumentos = rdbEmolumentosFalha.IsChecked.Value;
            _presenter.ControleComposicaoFinanceira.IndicadorFalhaTaxaLiquidacao = rdbLiquidacaoFalha.IsChecked.Value;
            _presenter.ControleComposicaoFinanceira.IndicadorFalhaCorretagem = rdbCorretagemFalha.IsChecked.Value;
            _presenter.ControleComposicaoFinanceira.IndicadorRegularizacaoVolume = rdbVolumeRegularizacao.IsChecked.Value;
            _presenter.ControleComposicaoFinanceira.IndicadorRegularizacaoEmolumentos = rdbEmolumentosRegularizacao.IsChecked.Value;
            _presenter.ControleComposicaoFinanceira.IndicadorRegularizacaoTaxaLiq = rdbLiquidacaoRegularizacao.IsChecked.Value;
            _presenter.ControleComposicaoFinanceira.IndicadorRegularizacaoCorretagem = rdbCorretagemRegularizacao.IsChecked.Value;
            _presenter.ControleComposicaoFinanceira.IndicadorNaoCobraVolume = rdbVolumeNaoCobra.IsChecked.Value;
            _presenter.ControleComposicaoFinanceira.IndicadorNaoCobraEmolumentos = rdbEmolumentosNaoCobra.IsChecked.Value;
            _presenter.ControleComposicaoFinanceira.IndicadorNaoCobraTaxaLiq = rdbLiquidacaoNaoCobra.IsChecked.Value;
            _presenter.ControleComposicaoFinanceira.IndicadorNaoCobraCorretagem = rdbCorretagemNaoCobra.IsChecked.Value;
         }


        private void dgdFalhas_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            if (dgdFalhas.SelectedItem != null)
            {
                this.ShowUserWaitingProcess();

                this.ClearServiceErrors();

                _presenter.ControleComposicaoFinanceira = new Sinacor.UI.Bovespa.Alocacao.Model.ControleComposicaoFinanceiraRecompra();
                _presenter.FalhaRecompraCorrente = new Sinacor.UI.Bovespa.Alocacao.Model.FalhaRecompra();

                this.AtualizarExecucoesRecompra();
                this.AtualizarComposicaoFinanceiraRecompra();

                _presenter.FalhaRecompraCorrente = (Model.FalhaRecompra)dgdFalhas.SelectedItem;
                _presenter.ObterRecompra();


                if( _presenter.ControleComposicaoFinanceira.TotalFinalLiquidar != null)
                    this.btnSalvar.IsEnabled = true;
                else
                    this.btnSalvar.IsEnabled = false;


                this.HideUserWaitingProcess();
            }
            else
            {
                _presenter.ControleComposicaoFinanceira = new Sinacor.UI.Bovespa.Alocacao.Model.ControleComposicaoFinanceiraRecompra();
                AtualizarComposicaoFinanceiraRecompra();

                this.btnSalvar.IsEnabled = false;
            }
        }
    }
}
